// pages/login/login.js - 严格按照test2示例设计规范

Page({
  data: {
    // 登录模式：password(密码登录) 或 captcha(验证码登录)
    loginMode: 'password',
    
    // 密码登录相关
    username: '',
    password: '',
    showPassword: false,
    rememberMe: false,
    
    // 验证码登录相关
    phone: '',
    captcha: '',
    canSendCode: true,
    captchaBtnText: '获取验证码',
    countdown: 0,
    
    // 登录状态
    canLogin: false
  },

  onLoad() {
    console.log('登录页面加载完成');
    this.checkLoginStatus();
  },

  onShow() {
    this.checkLoginStatus();
  },

  // 检查登录状态
  checkLoginStatus() {
    const userInfo = wx.getStorageSync('userInfo');
    const token = wx.getStorageSync('token');

    if (userInfo && token) {
      wx.switchTab({
        url: '/pages/index/index'
      });
    }
  },

  // 切换登录模式
  switchMode(e) {
    const mode = e.currentTarget.dataset.mode;
    this.setData({
      loginMode: mode,
      canLogin: false
    });
    this.updateLoginButton();
  },

  // 用户名输入
  onUsernameInput(e) {
    this.setData({
      username: e.detail.value
    });
    this.updateLoginButton();
  },

  // 密码输入
  onPasswordInput(e) {
    this.setData({
      password: e.detail.value
    });
    this.updateLoginButton();
  },

  // 手机号输入
  onPhoneInput(e) {
    this.setData({
      phone: e.detail.value
    });
    this.updateLoginButton();
  },

  // 验证码输入
  onCaptchaInput(e) {
    this.setData({
      captcha: e.detail.value
    });
    this.updateLoginButton();
  },


  // 记住我状态改变
  onRememberChange(e) {
    this.setData({
      rememberMe: e.detail.value
    });
  },

  // 发送验证码
  sendCaptcha() {
    if (!this.data.canSendCode) return;

    const phone = this.data.phone;
    if (!phone) {
      wx.showToast({
        title: '请输入手机号',
        icon: 'none'
      });
      return;
    }

    if (!/^1[3-9]\d{9}$/.test(phone)) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none'
      });
      return;
    }

    // 模拟发送验证码
    wx.showToast({
      title: '验证码已发送',
      icon: 'success'
    });

    // 开始倒计时
    this.startCountdown();
  },

  // 开始倒计时
  startCountdown() {
    let countdown = 60;
    this.setData({
      canSendCode: false,
      countdown: countdown,
      captchaBtnText: `${countdown}s后重发`
    });

    const timer = setInterval(() => {
      countdown--;
      if (countdown <= 0) {
        clearInterval(timer);
        this.setData({
          canSendCode: true,
          countdown: 0,
          captchaBtnText: '获取验证码'
        });
      } else {
        this.setData({
          countdown: countdown,
          captchaBtnText: `${countdown}s后重发`
        });
      }
    }, 1000);
  },

  // 更新登录按钮状态
  updateLoginButton() {
    let canLogin = false;

    if (this.data.loginMode === 'password') {
      canLogin = this.data.username.trim() !== '' && this.data.password.trim() !== '';
    } else {
      canLogin = this.data.phone.trim() !== '' && this.data.captcha.trim() !== '';
    }

    this.setData({
      canLogin: canLogin
    });
  },

  // 处理登录
  handleLogin() {
    if (!this.data.canLogin) return;

    if (this.data.loginMode === 'password') {
      this.handlePasswordLogin();
    } else {
      this.handleCaptchaLogin();
    }
  },

  // 密码登录
  handlePasswordLogin() {
    const { username, password } = this.data;

    // 模拟登录验证
    if (username === 'test' && password === '123456') {
      this.loginSuccess();
    } else if (username === '' || password === '') {
      wx.showToast({
        title: '用户名和密码不能为空',
        icon: 'none'
      });
    } else {
      wx.showToast({
        title: '用户名或密码错误，请使用测试账号: test / 123456',
        icon: 'none'
      });
    }
  },

  // 验证码登录
  handleCaptchaLogin() {
    const { phone, captcha } = this.data;

    // 模拟验证码验证
    if (captcha === '123456') {
      this.loginSuccess();
    } else if (phone === '' || captcha === '') {
      wx.showToast({
        title: '手机号和验证码不能为空',
        icon: 'none'
      });
    } else {
      wx.showToast({
        title: '验证码错误，请使用测试验证码: 123456',
        icon: 'none'
      });
    }
  },

  // 登录成功
  loginSuccess() {
    const { getCurrentConfig } = require('../../config/env.js');
    const env = getCurrentConfig();
    // 保存用户信息
    const userInfo = {
      username: this.data.username || this.data.phone,
      avatar: 'https://design.gemcoder.com/staticResource/echoAiSystemImages/efca91feca20ecf51f903c763f833d29.png',
      loginTime: new Date().getTime()
    };

    wx.setStorageSync('userInfo', userInfo);
    // 仅在启用 Mock 时才写入演示用 token；否则保留已有真实 token
    const existingToken = wx.getStorageSync('token');
    if (env.MOCK_MODE) {
      wx.setStorageSync('token', existingToken || ('mock_token_' + Date.now()));
    }

    wx.showToast({
      title: '登录成功！',
      icon: 'success'
    });

    setTimeout(() => {
      wx.switchTab({
        url: '/pages/index/index'
      });
    }, 1500);
  },

  // 忘记密码
  forgotPassword() {
    wx.showModal({
      title: '忘记密码',
      content: '请联系客服重置密码，或使用验证码登录',
      showCancel: false
    });
  },

  // 微信登录
  wechatLogin() {
    const app = getApp();
    const { api } = require('../../utils/api');
    
    wx.showLoading({
      title: '登录中...',
      mask: true
    });

    // 调用微信登录获取 code
    wx.login({
      success: (res) => {
        if (res.code) {
          // 使用 code 调用后端接口
          api.user.wechatLogin(res.code)
            .then(data => {
              wx.hideLoading();
              
              // 检查返回数据
              if (data.code === 200 && data.token) {
                // 保存 token
                wx.setStorageSync('token', data.token);
                
                // 获取用户信息（如果后端返回了用户信息）
                if (data.userInfo) {
                  wx.setStorageSync('userInfo', data.userInfo);
                  app.login(data.userInfo);
                } else {
                  // 如果后端没有返回用户信息,则调用获取用户信息接口
                  api.user.getUserInfo()
                    .then(userInfo => {
                      wx.setStorageSync('userInfo', userInfo);
                      app.login(userInfo);
                    })
                    .catch(err => {
                      console.error('获取用户信息失败', err);
                      // 即使获取用户信息失败，也可以继续使用
                      const defaultUserInfo = {
                        username: '微信用户',
                        avatar: 'https://design.gemcoder.com/staticResource/echoAiSystemImages/efca91feca20ecf51f903c763f833d29.png',
                        loginTime: new Date().getTime()
                      };
                      wx.setStorageSync('userInfo', defaultUserInfo);
                      app.login(defaultUserInfo);
                    });
                }
                
                wx.showToast({
                  title: data.msg || '登录成功',
                  icon: 'success',
                  duration: 1500
                });
                
                // 跳转到首页
                setTimeout(() => {
                  wx.switchTab({
                    url: '/pages/index/index'
                  });
                }, 1500);
              } else {
                wx.showToast({
                  title: data.msg || '登录失败',
                  icon: 'none',
                  duration: 2000
                });
              }
            })
            .catch(err => {
              wx.hideLoading();
              console.error('微信登录失败', err);
              wx.showToast({
                title: err.message || '登录失败，请重试',
                icon: 'none',
                duration: 2000
              });
            });
        } else {
          wx.hideLoading();
          wx.showToast({
            title: '获取微信授权失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('微信登录失败', err);
        wx.showToast({
          title: '微信登录失败',
          icon: 'none'
        });
      }
    });
  },

  // 跳转注册
  goToRegister() {
    wx.showModal({
      title: '注册功能',
      content: '注册功能开发中，请使用测试账号登录：\n用户名: test\n密码: 123456',
      showCancel: false
    });
  }
});